﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SisEagle.IView.Administracao;
using System.Data;
using SisEagle.Common.Code;
using SisEagle.View.Web.Base;
using SisEagleVO;

namespace SisEagle.View.Web.Administracao
{
    public partial class Funcionario : Base.WebPageBase, IFuncionarioView
    {
        #region Singleton
        private SisEagleBO.FuncionarioBO _FuncionarioBusiness;
        private SisEagleBO.FuncionarioBO FuncionarioBusiness
        {
            get
            {
                if (_FuncionarioBusiness == null)
                    _FuncionarioBusiness = new SisEagleBO.FuncionarioBO();

                return _FuncionarioBusiness;
            }
        }

        #endregion

        #region Page-Load/OnInit

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            PaginaAtual = "~/Administracao/Funcionario.aspx";
            PaginaLista = "~/Administracao/Funcionarios.aspx";
            initialize();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                // Verifica se esta editando um registro
                if (Request.ExisteId())
                {
                    if (!Request.GetIdToInt().Equals(0))
                    {
                        DataSet ClientesData = FuncionarioBusiness.FindBy_CodFuncionario(Request.GetIdToInt());
                        var clientesEntity = ClientesData.Tables["Funcionario"];

                        // Quando a entidade não for encontrada retorna a mensagem de registro não encontrado
                        if (clientesEntity == null)
                        {
                            return;
                        }
                        Acao = ActionData.Update;

                        SetView(clientesEntity);

                    }
                }
                // Criando um novo registro
                else
                {
                    NovosDados();
                }
            }
        }

        private void initialize()
        {
            UcbotoesCadastro.BotaoSalvar.Click += (BotaoSalvar_Click);
            UcbotoesCadastro.BotaoNovo.Click += (BotaoNovo_Click);
            UcbotoesCadastro.BotaoExcluir.Click += (BotaoExcluir_Click);
            UcbotoesCadastro.BotaoSalvarFechar.Click += (BotaoSalvarFechar_Click);
            UcbotoesCadastro.BotaoCancelar.Click += (s, ev) => Response.Redirect(PaginaLista, false);
        }



        #endregion

        #region Acoes Botoes

        void BotaoNovo_Click(object sender, ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.PaginaAtual;
            SalvarDados();
        }

        void BotaoSalvarFechar_Click(object sender, ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.PaginaLista;
            SalvarDados();

        }

        void BotaoExcluir_Click(object sender, ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.PaginaLista;
            Acao = ActionData.Delete;
            SalvarDados();
        }

        void BotaoSalvar_Click(object sender, ImageClickEventArgs e)
        {

            RedirecionaSalvar = Redirecionamento.NaoRedirecionar;
            SalvarDados();
            NovosDados();



        }
        #endregion

        #region Binding
        public int CodFuncionario
        {
            get
            {
                if (string.IsNullOrEmpty(txtCodigo.Text) || !(UtilsNumber.IsNumber(txtCodigo.Text)))
                {
                    return 0;
                }
                else
                    return Convert.ToInt32(txtCodigo.Text);

            }
            set
            {
                txtCodigo.Text = value.ToString();
            }
        }
        public string Nome
        {
            get
            {
                if (string.IsNullOrEmpty(txtNome.Text))
                    return string.Empty;

                else
                    return txtNome.Text.TrimStart();
            }
            set
            {

                txtNome.Text = value;
            }
        }
        public string Endereco
        {
            get
            {
                if (string.IsNullOrEmpty(txtEndereco.Text))
                    return string.Empty;

                else
                    return txtEndereco.Text.TrimStart();
            }
            set
            {
                txtEndereco.Text = value;

            }
        }
        public string NomeCidade
        {

            get
            {
                if (string.IsNullOrEmpty(txtNomeCidade.Text))
                    return string.Empty;

                else
                    return txtNomeCidade.Text.TrimStart();
            }
            set
            {
                txtNomeCidade.Text = value;

            }

        }
        public string Bairro
        {
            get
            {
                if (string.IsNullOrEmpty(txtBairro.Text))
                    return string.Empty;

                else
                    return txtBairro.Text.TrimStart();
            }
            set
            {
                txtBairro.Text = value;

            }
        }
        public string CPF
        {
            get
            {
                if (string.IsNullOrEmpty(txtCPF.Text))
                    return string.Empty;

                else
                {
                    if (UtilsNumber.ValidaCPF(txtCPF.Text.TrimStart()))
                    {
                        return UtilsNumber.FormataTexto(txtCPF.Text.TrimStart());
                    }
                    else
                    {
                        return string.Empty;
                    }

                }
            }
            set
            {
                txtCPF.Text = value;
            }
        }
        public int CodEstado
        {
            get
            {
                if (string.IsNullOrEmpty(UcCmbEstados.ComboEstados.SelectedValue) || !(UtilsNumber.IsNumber(UcCmbEstados.ComboEstados.SelectedValue)))
                {
                    return 0;
                }
                else
                    return Convert.ToInt32(UcCmbEstados.ComboEstados.SelectedValue);

            }
            set
            {

                UcCmbEstados.ComboEstados.SelectedValue = value.ToString();
            }
        }
        public string TelefoneRes
        {
            get
            {
                if (string.IsNullOrEmpty(txtTelefoneRes.Text))
                    return string.Empty;

                else
                    return UtilsNumber.FormataTexto(txtTelefoneRes.Text.TrimStart());
            }
            set
            {
                txtTelefoneRes.Text = value;

            }
        }
        public string TelefoneCel
        {
            get
            {
                if (string.IsNullOrEmpty(txtTelefoneCel.Text))
                    return string.Empty;

                else
                    return UtilsNumber.FormataTexto(txtTelefoneCel.Text.TrimStart());
            }
            set
            {
                txtTelefoneCel.Text = value;

            }
        }
        public int CodPrevilegio
        {
            get
            {
                if (string.IsNullOrEmpty(UcPrivilegios.ComboPrivilegios.SelectedValue) || !(UtilsNumber.IsNumber(UcPrivilegios.ComboPrivilegios.SelectedValue)))
                {
                    return 0;
                }
                else
                    return Convert.ToInt32(UcPrivilegios.ComboPrivilegios.SelectedValue);

            }
            set
            {

                UcPrivilegios.ComboPrivilegios.SelectedValue = value.ToString();
            }
        }
        public string Senha
        {
            get
            {
                if (string.IsNullOrEmpty(txtSenha.Text))
                    return string.Empty;

                else
                    return txtSenha.Text.TrimStart();
            }
            set
            {
                txtSenha.Text = value;

            }
        }
        public string Email
        {
            get
            {
                if (string.IsNullOrEmpty(txtEmail.Text))
                    return string.Empty;

                else
                    return txtEmail.Text.TrimStart();
            }
            set
            {
                txtEmail.Text = value;

            }
        }

      

        private ActionData _Acao;
        [SaveInViewState]
        public ActionData Acao
        {
            get
            {

                return _Acao;

            }
            set
            {
                _Acao = value;
                UcbotoesCadastro.SetAcao(value);

            }
        }
        #endregion

        #region SetView - GetView - Novo

        private void SetView(DataTable FuncionariosEntity)
        {
            CodFuncionario = Convert.ToInt32(FuncionariosEntity.Rows[0]["CodFuncionario"]);
            Nome = FuncionariosEntity.Rows[0]["Nome"].ToString();
            Endereco = FuncionariosEntity.Rows[0]["Endereco"].ToString();
            NomeCidade = FuncionariosEntity.Rows[0]["NomeCidade"].ToString();
            Bairro = FuncionariosEntity.Rows[0]["Bairro"].ToString();
            CPF = FuncionariosEntity.Rows[0]["CPF"].ToString();
            TelefoneCel = FuncionariosEntity.Rows[0]["TelefoneCel"].ToString();
            Email = FuncionariosEntity.Rows[0]["Email"].ToString();
            TelefoneRes = FuncionariosEntity.Rows[0]["TelefoneRes"].ToString();
            CodEstado = Convert.ToInt32(FuncionariosEntity.Rows[0]["CodEstado"]);
            CodPrevilegio = Convert.ToInt16(FuncionariosEntity.Rows[0]["CodPrevilegio"]);

        }

        private FuncionarioVO GetView()
        {
            return new FuncionarioVO
            {
                CodFuncionario = CodFuncionario,
                Nome = Nome,
                Endereco = Endereco,
                NomeCidade = NomeCidade,
                Bairro = Bairro,
                CPF = CPF,
                TelefoneRes = TelefoneRes,
                Email = Email,
                TelefoneCel = TelefoneCel,
                codPrevilegio = CodPrevilegio,
                Senha = Senha,
                codEstado = CodEstado
            };

        }

        private void NovosDados()
        {
            Acao = ActionData.New;
            txtBairro.Text = string.Empty;
            txtCodigo.Text = string.Empty;
            txtCPF.Text = string.Empty;
            txtEmail.Text = string.Empty;
            txtEndereco.Text = string.Empty;
            txtNome.Text = string.Empty;
            txtNomeCidade.Text = string.Empty;
            txtSenha.Text = string.Empty;
            txtTelefoneCel.Text = string.Empty;
            txtTelefoneRes.Text = string.Empty;
            UcCmbEstados.ComboEstados.SelectedIndex =1;
            

        }

        #endregion

        #region Crud
        private void SalvarDados()
        {
            int controlador = 0;
            //Instancia da entidade que sera Salva
            SisEagleVO.FuncionarioVO FuncionarioEntity = new SisEagleVO.FuncionarioVO();

            FuncionarioEntity = GetView();

            switch (Acao)
            {

                case ActionData.New: controlador = FuncionarioBusiness.Insert(FuncionarioEntity);
                    break;
                case ActionData.Update: controlador = FuncionarioBusiness.Update(FuncionarioEntity);
                    break;
                case ActionData.Delete: controlador = FuncionarioBusiness.Delete(FuncionarioEntity);
                    break;
                case ActionData.None:
                default:
                    break;

            }
            MonstraMensagem(controlador, Acao);
        }

        #endregion Crud

        #region Mensagem
        public void MonstraMensagem(int controlador, ActionData Acao)
        {
            if ((controlador == 1) && (Acao == ActionData.New))
            {
                UcbotoesCadastro.AdicionaMensagem("Registro salvo com sucesso!", MensagemTipo.Aviso);
            }
            if ((controlador == 1) && (Acao == ActionData.Update))
            {
                UcbotoesCadastro.AdicionaMensagem("Registro alterado com sucesso!", MensagemTipo.Aviso);
            }
            if ((controlador == 1) && (Acao == ActionData.Delete))
            {
                UcbotoesCadastro.AdicionaMensagem("Registro deletado com sucesso!", MensagemTipo.Aviso);
            }
        }

        #endregion

    }
}